package com.time.admin.application.controller;

import com.google.common.base.Preconditions;
import com.time.admin.application.converter.CommentDTOConverter;
import com.time.admin.application.dto.CommentDTO;
import com.time.admin.common.entity.PageResult;
import com.time.admin.domain.entity.CommentBO;
import com.time.admin.domain.service.AdminCommentDomainService;
import com.time.auth.entity.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * 评论管理控制层类
 *
 * @author: HuangQi
 * @date: Created in 10:39 2025/11/3
 * @description: 评论管理控制层
 */
@Slf4j
@RestController
@RequestMapping("/admin/comment/")
public class CommentController {

    @Autowired
    private AdminCommentDomainService adminCommentDomainService;

    /**
     * 新增评论
     *
     * @param commentDTO 新增评论信息
     * @return 新增结果
     */
    @PostMapping("add")
    public Result<Boolean> add(@RequestBody CommentDTO commentDTO) {
        try {
            if (log.isInfoEnabled()) {
                log.info("Admin.FriendLinkController.add.dto:{}", commentDTO);
            }
            // 参数校验
            Preconditions.checkNotNull(commentDTO.getParentCommentId(), "评论的父id不能为空");
            Preconditions.checkNotNull(commentDTO.getContent(), "评论的内容不能为空");

            // 调用领域层
            CommentBO commentBO = CommentDTOConverter.INSTANCE.convertDTOToBO(commentDTO);
            Boolean addResult = adminCommentDomainService.add(commentBO);

            // 返回结果
            return Result.ok(addResult);
        } catch (Exception e) {
            // 异常处理
            log.error("Admin.FriendLinkController.add.error:{}", e.getMessage(), e);
            return Result.fail("管理模块新增评论失败");
        }
    }

    /**
     * 更新评论
     *
     * @param commentDTO 更新评论的信息
     * @return 更新结果
     */
    @PostMapping("update")
    public Result<Boolean> update(@RequestBody CommentDTO commentDTO) {
        try {
            if (log.isInfoEnabled()) {
                log.info("Admin.FriendLinkController.update.dto:{}", commentDTO);
            }
            // 参数校验
            Preconditions.checkNotNull(commentDTO.getCommentId(), "评论的id不能为空");
            Preconditions.checkNotNull(commentDTO.getContent(), "评论的内容不能为空");

            // 调用领域层
            CommentBO commentBO = CommentDTOConverter.INSTANCE.convertDTOToBO(commentDTO);
            Boolean updateResult = adminCommentDomainService.update(commentBO);

            // 返回结果
            return Result.ok(updateResult);
        } catch (Exception e) {
            // 异常处理
            log.error("Admin.FriendLinkController.update.error:{}", e.getMessage(), e);
            return Result.fail("管理模块更新评论失败");
        }
    }

    /**
     * 删除评论
     *
     * @param id 删除评论的id
     * @return 删除结果
     */
    @PostMapping("delete/{id}")
    public Result<Boolean> delete(@PathVariable("id") Long id) {
        try {
            if (log.isInfoEnabled()) {
                log.info("Admin.FriendLinkController.delete.id:{}", id);
            }
            // 参数校验
            Preconditions.checkNotNull(id, "评论的id不能为空");

            // 调用领域层
            Boolean deleteResult = adminCommentDomainService.delete(id);

            // 返回结果
            return Result.ok(deleteResult);
        } catch (Exception e) {
            // 异常处理
            log.error("Admin.FriendLinkController.delete.error:{}", e.getMessage(), e);
            return Result.fail("管理模块删除评论失败");
        }
    }

    /**
     * 分页查询所有评论
     *
     * @param commentDTO 分页查询所有评论信息
     * @return 分页评论信息结果
     */
    @PostMapping("queryAll")
    public Result<PageResult<CommentDTO>> queryPageComment(@RequestBody CommentDTO commentDTO) {
        try {
            if (log.isInfoEnabled()) {
                log.info("Admin.FriendLinkController.queryCommentByCondition.dto: {}", commentDTO);
            }

            // 调用领域层
            CommentBO commentBO = CommentDTOConverter.INSTANCE.convertDTOToBO(commentDTO);
            PageResult<CommentBO> infoBOPageResult = adminCommentDomainService.queryPageComment(commentBO);

            // 返回结果
            PageResult<CommentDTO> infoDTOPageResult = CommentDTOConverter.INSTANCE.convertBOPageToDTOPage(infoBOPageResult);
            return Result.ok(infoDTOPageResult);
        } catch (Exception e) {
            // 异常处理
            log.error("Admin.FriendLinkController.queryAllTag.error:{}", e.getMessage(), e);
            return Result.fail("管理模块条件分页获取评论失败");
        }
    }
}
